package lancoo.com.net.retrofitrxjava.subscriber;

import android.content.Context;
import android.text.TextUtils;

import java.io.IOException;

import io.reactivex.observers.ResourceObserver;
import lancoo.com.net.retrofitrxjava.ApiException;
import retrofit2.HttpException;

/**
 * Author: pengmi;
 * Time: 2016/4/21;
 */
public class NormalSubscriber<T> extends ResourceObserver<T> {

    private String errorToast;
    private Context mContext;

    /**
     * 显示自定义错误提示
     *
     * @param context    上下文
     * @param errorToast 错误提示
     */
    public NormalSubscriber(Context context, String errorToast) {
        this.errorToast = errorToast;
        this.mContext = context;
    }

    /**
     * 显示异常或默认错误提示
     *
     * @param context 上下文
     */
    public NormalSubscriber(Context context) {
        this.mContext = context;
    }

    /**
     * 不显示任何提示
     */
    public NormalSubscriber() {
    }


    @Override
    public void onNext(T t) {

    }

    @Override
    public void onError(Throwable e) {
        if (e instanceof IOException) {
            /** 没有网络 */
            errorToast = "Please check your network status";
        } else if (e instanceof HttpException) {
            /** 网络异常，http 请求失败，即 http 状态码不在 [200, 300) 之间, such as: "server internal error". */
            errorToast = ((HttpException) e).response().message();
        } else if (e instanceof ApiException) {
            /** 网络正常，http 请求成功，服务器返回逻辑错误 */
            errorToast = ((ApiException)e).getMessage();
        } else {
            /** 其他未知错误 */
            errorToast = !TextUtils.isEmpty(e.getMessage()) ? e.getMessage() : "unknown error";
        }
    }

    @Override
    public void onComplete() {

    }

}
